#include<bits/stdc++.h>
using namespace std;

int n,k;

int main()
{
	priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>> > q;
	cin>>n>>k;
	int tmp;
	for(int i=0;i<n;i++)
	{
		cin>>tmp;
		q.push({tmp,i});
	}	
	int left[n];
	int right[n];
	for(int i=0;i<n;i++)
	{
		left[i]=i-1;
		right[i]=i+1;
	}
	//k趟，每趟找最小的是n，修改两边是n，这是我第一遍代码的复杂度，到最后k*n，也就是n*2，100亿，超过1s，优化非常精妙
	
	long long cnt[n]={0};//欠债
	while(k--)
	{
        //如果最小的不是有欠债的，那欠债的只会更大，因此最小还是这个数，如果最小就是欠债，那这次不算，加入欠债再选
		long long val=q.top().first;
		int index=q.top().second;
		q.pop();
		if(cnt[index]!=0)
		{
			q.push({val+cnt[index],index});
			cnt[index]=0;
			k++;
		}
		else
		{
			if(left[index]>=0)
			{
				cnt[left[index]]+=val;
				right[left[index]]=right[index];
			}
			if(right[index]<n)
			{
				cnt[right[index]]+=val;
				left[right[index]]=left[index];
			}

			
			
			
		}
		
	}
	vector<pair<long long,int>> arr(n,{-1,-1});
	while(!q.empty())
	{
		auto tmp=q.top();
		tmp.first+=cnt[tmp.second];
		arr[q.top().second]=tmp;
		
		q.pop();
	}
	for(int i=0;i<n;i++)
	{
		if(arr[i].second!=-1)
		{
			cout<<arr[i].first<<" ";
		}
	}
	return 0;
}